﻿using OpenTK.Input;

namespace Lichtspiel.Input
{
    public enum KeyCode
    {
        // direct opentk mapping

        /// <summary>A key outside the known keys.</summary>
        Unknown = Key.Unknown,

        // Modifiers
        /// <summary>The left shift key.</summary>
        ShiftLeft = Key.ShiftLeft,
        /// <summary>The left shift key (equivalent to ShiftLeft).</summary>
        LShift = ShiftLeft,
        /// <summary>The right shift key.</summary>
        ShiftRight = Key.ShiftRight,
        /// <summary>The right shift key (equivalent to ShiftRight).</summary>
        RShift = ShiftRight,
        /// <summary>The left control key.</summary>
        ControlLeft = Key.ControlLeft,
        /// <summary>The left control key (equivalent to ControlLeft).</summary>
        LControl = ControlLeft,
        /// <summary>The right control key.</summary>
        ControlRight = Key.ControlRight,
        /// <summary>The right control key (equivalent to ControlRight).</summary>
        RControl = ControlRight,
        /// <summary>The left alt key.</summary>
        AltLeft = Key.AltLeft,
        /// <summary>The left alt key (equivalent to AltLeft.</summary>
        LAlt = AltLeft,
        /// <summary>The right alt key.</summary>
        AltRight = Key.AltRight,
        /// <summary>The right alt key (equivalent to AltRight).</summary>
        RAlt = AltRight,
        /// <summary>The left win key.</summary>
        WinLeft = Key.WinLeft,
        /// <summary>The left win key (equivalent to WinLeft).</summary>
        LWin = WinLeft,
        /// <summary>The right win key.</summary>
        WinRight = Key.WinRight,
        /// <summary>The right win key (equivalent to WinRight).</summary>
        RWin = WinRight,
        /// <summary>The menu key.</summary>
        Menu = Key.Menu,

        // Function keys (hopefully enough for most keyboards - mine has 26)
        // <keysymdef.h> on X11 reports up to 35 function keys.
        /// <summary>The F1 key.</summary>
        F1 = Key.F1,
        /// <summary>The F2 key.</summary>
        F2 = Key.F2,
        /// <summary>The F3 key.</summary>
        F3 = Key.F3,
        /// <summary>The F4 key.</summary>
        F4 = Key.F4,
        /// <summary>The F5 key.</summary>
        F5 = Key.F5,
        /// <summary>The F6 key.</summary>
        F6 = Key.F6,
        /// <summary>The F7 key.</summary>
        F7 = Key.F7,
        /// <summary>The F8 key.</summary>
        F8 = Key.F8,
        /// <summary>The F9 key.</summary>
        F9 = Key.F9,
        /// <summary>The F10 key.</summary>
        F10 = Key.F10,
        /// <summary>The F11 key.</summary>
        F11 = Key.F11,
        /// <summary>The F12 key.</summary>
        F12 = Key.F12,

        /* /// <summary>The F13 key.</summary>
        F13 = OpenTK.Input.Key.,
        /// <summary>The F14 key.</summary>
        F14 = OpenTK.Input.Key.,
        /// <summary>The F15 key.</summary>
        F15 = OpenTK.Input.Key.,
        /// <summary>The F16 key.</summary>
        F16 = OpenTK.Input.Key.,
        /// <summary>The F17 key.</summary>
        F17 = OpenTK.Input.Key.,
        /// <summary>The F18 key.</summary>
        F18 = OpenTK.Input.Key.,
        /// <summary>The F19 key.</summary>
        F19 = OpenTK.Input.Key.,
        /// <summary>The F20 key.</summary>
        F20 = OpenTK.Input.Key.,
        /// <summary>The F21 key.</summary>
        F21 = OpenTK.Input.Key.,
        /// <summary>The F22 key.</summary>
        F22 = OpenTK.Input.Key.,
        /// <summary>The F23 key.</summary>
        F23 = OpenTK.Input.Key.,
        /// <summary>The F24 key.</summary>
        F24 = OpenTK.Input.Key.,
        /// <summary>The F25 key.</summary>
        F25 = OpenTK.Input.Key.,
        /// <summary>The F26 key.</summary>
        F26 = OpenTK.Input.Key.,
        /// <summary>The F27 key.</summary>
        F27 = OpenTK.Input.Key.,
        /// <summary>The F28 key.</summary>
        F28 = OpenTK.Input.Key.,
        /// <summary>The F29 key.</summary>
        F29 = OpenTK.Input.Key.,
        /// <summary>The F30 key.</summary>
        F30 = OpenTK.Input.Key.,
        /// <summary>The F31 key.</summary>
        F31 = OpenTK.Input.Key.,
        /// <summary>The F32 key.</summary>
        F32 = OpenTK.Input.Key.,
        /// <summary>The F33 key.</summary>
        F33 = OpenTK.Input.Key.,
        /// <summary>The F34 key.</summary>
        F34 = OpenTK.Input.Key.,
        /// <summary>The F35 key.</summary>
        F35 = OpenTK.Input.Key., */

        // Direction arrows
        /// <summary>The up arrow key.</summary>
        Up = Key.Up,
        /// <summary>The down arrow key.</summary>
        Down = Key.Down,
        /// <summary>The left arrow key.</summary>
        Left = Key.Left,
        /// <summary>The right arrow key.</summary>
        Right = Key.Right,

        /// <summary>The enter key.</summary>
        Enter = Key.Enter,
        /// <summary>The escape key.</summary>
        Escape = Key.Escape,
        /// <summary>The space key.</summary>
        Space = Key.Space,
        /// <summary>The tab key.</summary>
        Tab = Key.Tab,
        /// <summary>The backspace key.</summary>
        BackSpace = Key.BackSpace,
        /// <summary>The backspace key (equivalent to BackSpace).</summary>
        Back = BackSpace,
        /// <summary>The insert key.</summary>
        Insert = Key.Insert,
        /// <summary>The delete key.</summary>
        Delete = Key.Delete,
        /// <summary>The page up key.</summary>
        PageUp = Key.PageUp,
        /// <summary>The page down key.</summary>
        PageDown = Key.PageDown,
        /// <summary>The home key.</summary>
        Home = Key.Home,
        /// <summary>The end key.</summary>
        End = Key.End,
        /// <summary>The caps lock key.</summary>
        CapsLock = Key.CapsLock,
        /// <summary>The scroll lock key.</summary>
        ScrollLock = Key.ScrollLock,
        /// <summary>The print screen key.</summary>
        PrintScreen = Key.PrintScreen,
        /// <summary>The pause key.</summary>
        Pause = Key.Pause,
        /// <summary>The num lock key.</summary>
        NumLock = Key.NumLock,

        // Special keys
        /// <summary>The clear key (Keypad5 with NumLock disabled, on typical keyboards).</summary>
        Clear = Key.Clear,
        /// <summary>The sleep key.</summary>
        Sleep = Key.Sleep,

        // Keypad keys
        /// <summary>The keypad 0 key.</summary>
        Keypad0 = Key.Keypad0,
        /// <summary>The keypad 1 key.</summary>
        Keypad1 = Key.Keypad1,
        /// <summary>The keypad 2 key.</summary>
        Keypad2 = Key.Keypad2,
        /// <summary>The keypad 3 key.</summary>
        Keypad3 = Key.Keypad3,
        /// <summary>The keypad 4 key.</summary>
        Keypad4 = Key.Keypad4,
        /// <summary>The keypad 5 key.</summary>
        Keypad5 = Key.Keypad5,
        /// <summary>The keypad 6 key.</summary>
        Keypad6 = Key.Keypad6,
        /// <summary>The keypad 7 key.</summary>
        Keypad7 = Key.Keypad7,
        /// <summary>The keypad 8 key.</summary>
        Keypad8 = Key.Keypad8,
        /// <summary>The keypad 9 key.</summary>
        Keypad9 = Key.Keypad9,
        /// <summary>The keypad divide key.</summary>
        KeypadDivide = Key.KeypadDivide,
        /// <summary>The keypad multiply key.</summary>
        KeypadMultiply = Key.KeypadMultiply,
        /// <summary>The keypad subtract key.</summary>
        KeypadSubtract = Key.KeypadSubtract,
        /// <summary>The keypad minus key (equivalent to KeypadSubtract).</summary>
        KeypadMinus = KeypadSubtract,
        /// <summary>The keypad add key.</summary>
        KeypadAdd = Key.KeypadAdd,
        /// <summary>The keypad plus key (equivalent to KeypadAdd).</summary>
        KeypadPlus = KeypadAdd,
        /// <summary>The keypad decimal key.</summary>
        KeypadDecimal = Key.KeypadDecimal,
        /// <summary>The keypad enter key.</summary>
        KeypadEnter = Key.KeypadEnter,

        // Letters
        /// <summary>The A key.</summary>
        A = Key.A,
        /// <summary>The B key.</summary>
        B = Key.B,
        /// <summary>The C key.</summary>
        C = Key.C,
        /// <summary>The D key.</summary>
        D = Key.D,
        /// <summary>The E key.</summary>
        E = Key.E,
        /// <summary>The F key.</summary>
        F = Key.F,
        /// <summary>The G key.</summary>
        G = Key.G,
        /// <summary>The H key.</summary>
        H = Key.H,
        /// <summary>The I key.</summary>
        I = Key.I,
        /// <summary>The J key.</summary>
        J = Key.J,
        /// <summary>The K key.</summary>
        K = Key.K,
        /// <summary>The L key.</summary>
        L = Key.L,
        /// <summary>The M key.</summary>
        M = Key.M,
        /// <summary>The N key.</summary>
        N = Key.N,
        /// <summary>The O key.</summary>
        O = Key.O,
        /// <summary>The P key.</summary>
        P = Key.P,
        /// <summary>The Q key.</summary>
        Q = Key.Q,
        /// <summary>The R key.</summary>
        R = Key.R,
        /// <summary>The S key.</summary>
        S = Key.S,
        /// <summary>The T key.</summary>
        T = Key.T,
        /// <summary>The U key.</summary>
        U = Key.U,
        /// <summary>The V key.</summary>
        V = Key.V,
        /// <summary>The W key.</summary>
        W = Key.W,
        /// <summary>The X key.</summary>
        X = Key.X,
        /// <summary>The Y key.</summary>
        Y = Key.Y,
        /// <summary>The Z key.</summary>
        Z = Key.Z,

        // Numbers
        /// <summary>The number 0 key.</summary>
        Number0 = Key.Number0,
        /// <summary>The number 1 key.</summary>
        Number1 = Key.Number1,
        /// <summary>The number 2 key.</summary>
        Number2 = Key.Number2,
        /// <summary>The number 3 key.</summary>
        Number3 = Key.Number3,
        /// <summary>The number 4 key.</summary>
        Number4 = Key.Number4,
        /// <summary>The number 5 key.</summary>
        Number5 = Key.Number5,
        /// <summary>The number 6 key.</summary>
        Number6 = Key.Number6,
        /// <summary>The number 7 key.</summary>
        Number7 = Key.Number7,
        /// <summary>The number 8 key.</summary>
        Number8 = Key.Number8,
        /// <summary>The number 9 key.</summary>
        Number9 = Key.Number9,

        // Symbols
        /// <summary>The tilde key.</summary>
        Tilde = Key.Tilde,
        /// <summary>The minus key.</summary>
        Minus = Key.Minus,
        //Equal = OpenTK.Input.Key.,
        /// <summary>The plus key.</summary>
        Plus = Key.Plus,
        /// <summary>The left bracket key.</summary>
        BracketLeft = Key.BracketLeft,
        /// <summary>The left bracket key (equivalent to BracketLeft).</summary>
        LBracket = BracketLeft,
        /// <summary>The right bracket key.</summary>
        BracketRight = Key.BracketRight,
        /// <summary>The right bracket key (equivalent to BracketRight).</summary>
        RBracket = BracketRight,
        /// <summary>The semicolon key.</summary>
        Semicolon = Key.Semicolon,
        /// <summary>The quote key.</summary>
        Quote = Key.Quote,
        /// <summary>The comma key.</summary>
        Comma = Key.Comma,
        /// <summary>The period key.</summary>
        Period = Key.Period,
        /// <summary>The slash key.</summary>
        Slash = Key.Slash,
        /// <summary>The backslash key.</summary>
        BackSlash = Key.BackSlash,
        /// <summary>Indicates the last available keyboard key.</summary>
        LastKey
    }
}